package design;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @author: hero生仔
 *
 * 这个类和 8_01 包的类不一样了，这个类继承的是装饰器抽象类，没有破坏原来的 SsoInterceptor 这个类
 */
public class LoginSsoDecorator extends SsoDecorator {

    private static Map<String, String> authMap = new ConcurrentHashMap<String, String>();

    static {
        authMap.put("huahua", "queryUserInfo");
        authMap.put("doudou", "queryUserInfo");
    }

    public LoginSsoDecorator(HandlerInterceptor handlerInterceptor) {
        super(handlerInterceptor);
    }

    @Override
    public boolean preHandle(String request, String response, Object handler) {
        // 这里调用登录校验的原来的逻辑
        boolean success = super.preHandle(request, response, handler);
        // 从这里开始 才是扩展的逻辑（将个⼈可访问哪些方法的功能添加到方法中）
        if (!success) return false;
        String userId = request.substring(8);
        String method = authMap.get(userId);
        System.out.println("模拟单点登录方法访问拦截校验：" + userId + " " + method);
        // 模拟方法校验
        return "queryUserInfo".equals(method);
    }
}
